home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Tools - Objects / Virtual User 1.0 / Example Scripts / ResEditStressTest / ResEditTest.vu < prev   
Text File  |  1991-01-25  |  17KB  |  458 lines

  1. #
  2. #    File:        ResEdit_test.vu
  3. #
  4. #    Contains:    A ResEdit test script that creates a window for each of the predefined resource types.
  5. #                If you have a file called "vu-wants-1-of-each" on the topmost volume, this script
  6. #                will delete it and recreate it.  This name is kept in a string called Res_file_name
  7. #                and can be changed if desired.
  8. #
  9. #                This script does quite a bit so it takes a while to execute.  If you would rather
  10. #                have it create some number of resource type windows less than the total, modify the 
  11. #                value of Number_Of_Resources_To_Make. The following statement will create the 
  12. #                first 15 resource types:                    
  13. #                    Number_Of_Resources_To_Make := 15;
  14. #                The variable Number_Of_Resources_To_Make is used to pass a second parameter to 
  15. #                create_one_of_each_type() which indicates the number of resource types you'd 
  16. #                like created. 
  17. #
  18. #                This script demonstrates how to use the scroll command to scroll through a 
  19. #                scrolling list of items.  Run it and watch what it does with scrolling.
  20. #
  21. #    Libraries:    "UtilityTasksLib.vu"
  22. #
  23. #    Prerequisites: 
  24. #                Be sure the UtilityTasksLib.vu library is available.
  25. #                The Finder must be the active app.(preferably the only app. running).
  26. #                If the target is running under a 6.0.x system, then:
  27. #                    The ResEdit app must be in the root directory as the first file listed 
  28. #                    (view by name and rename to start its name with 'aa' for example). 
  29. #                    Either this window should be open and no other;
  30. #                    or the volume icon selected and no windows open. 
  31. #                If the target is running under a 7.0.x system, then:
  32. #                    The ResEdit app must be the first occurance of ResEdit which Finder's 
  33. #                    Find command will select. This is best accomplished by putting it in the  
  34. #                    frontmost window and removing any other files with 'ResEdit' in it's name.
  35. #
  36. #    Written by:    Jay Jessen and Rick Violet
  37. #
  38. #    Copyright:    © 1990 by Apple Computer, Inc., all rights reserved.
  39. #
  40. #    Change History:
  41. #
  42. #         6/7/89       Jay         Created from an old version (optimized scrolling actions)
  43. #         1/2/91       Rick         Updated Jay's version so that this script will run against both
  44. #                             ResEdit v1.2 and ResEdit v2.1 (under system 6.0x and system 7.0).
  45. #                             In the process defined some new tasks modified some old tasks and
  46. #                             task names
  47. #         1/4/91       naga         Modified the header comments 
  48. #         1/9/91       Rick         Moved some Tasks to "UtilityTasksLib.vu"
  49. #
  50. #    To Do:
  51. #
  52.  
  53. Libraries "UtilityTasksLib.vu";
  54.  
  55. (************************************************************************************
  56. *    Task    set_screen_dependents()
  57. ************************************************************************************)
  58. task set_screen_dependents() begin
  59.         # Where to drag resource windows to get them out of the way
  60.     global Wind_x := 250;    # hardwired for now
  61.     global Wind_y := 20;    # hardwired for now
  62. end;
  63.  
  64. (************************************************************************************
  65. *    Task    clear_file(file_to_clear,check_selection := true)
  66. *    clears a file from Volume window, 
  67. *    if check_selection is false it'll clear the current selection ( For ResEdit 1.2 )
  68. ************************************************************************************)
  69. Task clear_file(file_to_clear,check_selection := true) begin
  70.     
  71.     global Volume_name;
  72.     
  73.     if(not match[window t:Volume_name o:1]!) begin
  74.         select [window t:Volume_name]!;
  75.     end;
  76.     if(check_selection) begin
  77.         type k: { "v" };
  78.         found_it := false;
  79.         while not found_it begin
  80.             UseKeyboardEquivalent("o");
  81.             if(match[staticText t:/The file≈has no resource fork≈Do you wish≈it ∂?/
  82.                                                                     w:[window o:1 s:dialog]]!) begin
  83.                 select [button t:'Cancel']!;
  84.                 type k: { downarrowKey };
  85.             end;
  86.             else begin
  87.                 if (((match[window o:1]!).title) = file_to_clear) begin
  88.                     found_it := true;
  89.                     close [window o:1]!;
  90.                 end;
  91.                 else begin
  92.                     close [window o:1]!;
  93.                     type k: { downarrowKey };
  94.                 end;
  95.             end;
  96.         end;
  97.     end;
  98.     select [menuItem t:'Clear' m:'Edit']!;
  99.     if match[button t:'OK']! and match[button t:'Cancel']! select [button t:'OK'];
  100. end;
  101.  
  102. (************************************************************************************
  103. *    Task    create_resource_file(res_file_name)
  104. *    Creates a resource file of name res_file_name. 
  105. *    Replaces any previously existing file of that name. ( For ResEdit 1.2 )
  106. ************************************************************************************)
  107. task create_resource_file(res_file_name) 
  108. begin
  109.     global Volume_name;
  110.     
  111.     if(not match[window t:Volume_name o:1]!) begin
  112.         select [window t:Volume_name]!;
  113.     end;
  114.     select [menuItem title:'New' m:'File']!;
  115.     type keystrokes: { res_file_name };
  116.     select [button title:'OK']!;
  117.     if(match[button t:'OK' w:[window o:1]]!) begin 
  118.         select [button t:'OK']!;
  119.         select [button t:'Cancel']!;
  120.         clear_file(res_file_name);
  121.         select [menuItem title:'New' m:'File']!;
  122.         type keystrokes: { res_file_name };
  123.         select [button title:'OK']!;
  124.     end;
  125. end;
  126.  
  127. (************************************************************************************
  128. *    Task    create_resource_file_2(res_file_name)
  129. *    Creates a resource file of name res_file_name. 
  130. *    Replaces any previously existing file of that name. ( For ResEdit 2.1 )
  131. ************************************************************************************)
  132. task create_resource_file_2(res_file_name) begin
  133.  
  134.     global Volume_name;
  135.     
  136.         
  137.     if( not match [ window ] )
  138.         select [menuItem title:/New≈/ m:'File']!;
  139.     else
  140.         if( match[ button  t:"New" ]! and match [ button t:"Open" ]! )
  141.             select [ button t:"new" ];
  142.  
  143.     type keystrokes: { res_file_name };
  144.     select [button title:'New']!;
  145.  
  146.     wait(2);
  147.     if(match[button t:'Replace' w:[window o:1]]!)
  148.         select [button t:'Replace']!;
  149. end;
  150.  
  151. (************************************************************************************
  152. *    Task    set_scroll_bar_globals() 
  153. *    set global values for scroll bar in "Select New Type" dialog    ( For ResEdit 1.2 )
  154. ************************************************************************************)
  155. Task set_scroll_bar_globals() 
  156. Begin
  157.  
  158.     global Scrollbar_left,Scrollbar_top,Scrollbar_right,Scrollbar_bottom;
  159.     global Previous_scroller_setting;
  160.  
  161.     select [menuItem title:/New≈/ m:'File']!;
  162.     
  163.     # get the "select new type" dialog's bounding rect and put it in wind_rect
  164.     match [window ord:1 rect:?wind_rect]!;
  165.     
  166.     # get the scroll bar's current setting and rectangle (in local coords)
  167.     current_scroller := match [scrollBar    window_owner:[window ord:1]
  168.                                             setting:?cntrl_value
  169.                                             rect:?scroller_rect]!;
  170.     
  171.     # ~~~~~ compute scroll bar rect in global coordinates (8 compensate for the dialog border pixels)
  172.     Scrollbar_left := scroller_rect[1];
  173.     Scrollbar_top := scroller_rect[2];
  174.     Scrollbar_right := scroller_rect[3];
  175.     Scrollbar_bottom := scroller_rect[4];
  176.     
  177.     if(cntrl_value[1] = cntrl_value[2]) begin
  178.         global Done_scrolling := true;
  179.     end;
  180.     else begin
  181.         Previous_scroller_setting := cntrl_value;
  182.     end;
  183. end;
  184.  
  185. (************************************************************************************
  186. *    Task set_scroll_bar_globals_2()
  187. *    set global values for scroll bar in "Select New Type" dialog ( For ResEdit 2.1 )
  188. ************************************************************************************)
  189. task set_scroll_bar_globals_2() begin
  190.  
  191.     global Scrollbar_left,Scrollbar_top,Scrollbar_right,Scrollbar_bottom;
  192.     global Previous_scroller_setting;
  193.  
  194.     select [menuItem title:/Create New Resource/ m:'Resource']!;
  195.     
  196.     # get the "select new type" dialog's bounding rect and put it in wind_rect
  197.     match [window ord:1 rect:?wind_rect]!;
  198.     
  199.     # get the scroll bar's current setting and rectangle (in local coords)
  200.     current_scroller := match [scrollBar    window_owner:[window ord:1]
  201.                                             setting:?cntrl_value
  202.                                             rect:?scroller_rect]!;
  203.     
  204.     # ~~~~~ compute scroll bar rect in global coordinates (8 compensate for the dialog border pixels)
  205.     Scrollbar_left := scroller_rect[1];
  206.     Scrollbar_top := scroller_rect[2];
  207.     Scrollbar_right := scroller_rect[3];
  208.     Scrollbar_bottom := scroller_rect[4];
  209.     
  210.     if(cntrl_value[1] = cntrl_value[2]) begin
  211.         global Done_scrolling := true;
  212.     end;
  213.     else begin
  214.         Previous_scroller_setting := cntrl_value;
  215.     end;
  216. end;
  217.  
  218. (************************************************************************************
  219. *    Task position_res_type_window()
  220. *    Position the resource type window, away from the volume window ( For ResEdit 1.2 )
  221. ************************************************************************************)
  222. task position_res_type_window() begin
  223.     drag [window ord:1] absolute:{ global Wind_x,global Wind_y };
  224.     Wind_x := Wind_x + 1;
  225.     Wind_y := Wind_y + 2;
  226. end;
  227.  
  228. (************************************************************************************
  229. *    Task select_next_type()
  230. *    scrolls to the next resource type in the "Select New Type" dialog
  231. ************************************************************************************)
  232. task select_next_type() begin
  233.  
  234.     global Previous_scroller_setting,Clicks_for_current_value;
  235.     global Done_scrolling;
  236.     global List_item_height;
  237.     global Scrollbar_left,Scrollbar_top,Scrollbar_right,Scrollbar_bottom;
  238.     global Non_top_item_selection;
  239.     
  240.     scroll [scrollBar w:[window o:1]] absolute: Previous_scroller_setting;
  241.     if(Done_scrolling) begin # ~~ only need to select the remaining visible items (no more scrolling)
  242.         move absolute: { Scrollbar_left - 10,
  243.                     Scrollbar_top + ((Non_top_item_selection - 1) * List_item_height) + 5 };
  244.         Non_top_item_selection := Non_top_item_selection + 1;
  245.     end;
  246.     else begin 
  247.         move absolute: { Scrollbar_right - 5,Scrollbar_bottom - 5 };
  248.         click;
  249.         match [scrollBar w:[window ord:1] setting:?cntrl_value]!;
  250.         if(cntrl_value[1] = Previous_scroller_setting[1]) begin # ~~~~~~~ scroll value hasn't changed
  251.             Clicks_for_current_value := Clicks_for_current_value + 1;
  252.             for i := 1 to Clicks_for_current_value click;
  253.         end;
  254.         else begin
  255.             Clicks_for_current_value := 0;
  256.         end;
  257.         move absolute: { Scrollbar_left - 10,Scrollbar_top + 5 };
  258.     end;
  259.     click;# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make the new selection
  260.     if (not Done_scrolling) begin
  261.         match [scrollBar w:[window ord:1] setting:?cntrl_value]!;
  262.         Previous_scroller_setting := cntrl_value;
  263.         if (cntrl_value[1] = cntrl_value[2]) begin
  264.             Done_scrolling := true;
  265.             List_item_height := 
  266.                 (Scrollbar_bottom - Scrollbar_top) / 7;# ~~~~~~~~~~~~~~~ 7 is the number of visible types
  267.             Non_top_item_selection := 2;# ~~~~~~~~~~~~~~~~~~~~ now used to select remaining visible items 
  268.         end;
  269.     end;
  270. end;
  271.  
  272. (************************************************************************************
  273. *    Task check_for_alert_or_position_window()
  274. *    checks for an alert and if one isn't there positions the window, 
  275. *    else it logs the alert and dismisses it
  276. ************************************************************************************)
  277. task check_for_alert_or_position_window() begin
  278.     if(match[button w:[window ord:1 style:dialog] t:'OK']!) begin
  279.         text_messages := collect[staticText w:[window ord:1 style:dialog]]!;
  280.         println "dismissing dialog that came up after resource type selection -- static text messages follow:";
  281.         for each m in text_messages println " ∂t",m.t;
  282.         select [button t:'OK'];
  283.     end;
  284.     else begin
  285.         position_res_type_window();
  286.     end;
  287. end;
  288.  
  289. (************************************************************************************
  290. *    Task check_for_alert_or_position_window_2() 
  291. *    checks for an alert and if one isn't there positions the window, 
  292. *    else it logs the alert and dismisses it. There is an exception for FOND resource 
  293. *    ( For ResEdit 2.1 )
  294. ************************************************************************************)
  295. Task check_for_alert_or_position_window_2() 
  296. begin
  297.  
  298.     if(match[ button w:[window o:1 s:dialog ] t:'OK' ]!) 
  299.         if( match[ statictext t:/≈Adding a font≈/ ]! )
  300.             Type k:{returnKey,"Chicago",tabKey,"12",returnKey};
  301.         else                
  302.             begin
  303.             text_messages := collect[staticText w:[window ord:1 style:dialog]]!;
  304.             println "dismissing dialog that came up after resource type selection -- static text messages follow:";
  305.             for each m in text_messages println " ∂t",m.t;
  306.             select [button t:'OK'];
  307.             end;
  308.         
  309.     if( match [window t:/≈ID =≈/]! )
  310.         if ( match [window o:1 c:true]! )  
  311.             close [window o:1];
  312.         else if( match [menuItem title:'Close' m:'File' e:1 ]! )
  313.             select [menuItem title:'Close' m:'File']!;
  314.  
  315.     if( match [window t:?tText ] and tText <> global Res_file_name )
  316.         position_res_type_window();
  317.     
  318. end;
  319.  
  320. (************************************************************************************
  321. *    Task create_one_of_each_type( some_of_each := 0)
  322. *    This task creates one of each resource type if some_of_each is zero.
  323. *    It will create the first ten resource types if some_of_each is 10. etc. ( ResEdit 1.2 )
  324. ************************************************************************************)  
  325. task create_one_of_each_type( some_of_each := 0) begin
  326.  
  327.     global Scrollbar_left,Scrollbar_top;
  328.     global Res_file_name;
  329.  
  330.     
  331.     set_scroll_bar_globals();
  332.     move absolute: { Scrollbar_left - 10,Scrollbar_top + 5 };
  333.     click;
  334.     select [button t:'OK']!;
  335.     check_for_alert_or_position_window();
  336.     creations_count := 1;
  337.  
  338.     while ((global Non_top_item_selection <> 8) and  
  339.                                     ((not some_of_each) or (creations_count <> some_of_each))) begin
  340.             if(not match[window t:Res_file_name o:1]!) select [window t:Res_file_name]!;
  341.             select [menuItem title:'New' m:'File']!;
  342.             select_next_type();
  343.             creations_count := creations_count + 1;
  344.             select [button t:'OK']!;
  345.             check_for_alert_or_position_window();
  346.     end;
  347. end;
  348.  
  349. (**************************************************************************************************** 
  350. *    Task create_one_of_each_type_2( some_of_each )
  351. *    This task creates one of each resource type if some_of_each is zero.
  352. *    It will create the first ten resource types if some_of_each is 10. etc.
  353. ****************************************************************************************************)  
  354. task create_one_of_each_type_2( some_of_each := 0) begin
  355.  
  356.     global Scrollbar_left,Scrollbar_top;
  357.     global Res_file_name;
  358.  
  359.     
  360.     set_scroll_bar_globals_2();
  361.     move absolute: { Scrollbar_left - 10,Scrollbar_top + 5 };
  362.     click;
  363.     select [button t:'OK']!;
  364.     check_for_alert_or_position_window_2();
  365.     creations_count := 1;
  366.  
  367.     while ((global Non_top_item_selection <> 8) and  
  368.                                     ((not some_of_each) or (creations_count <> some_of_each))) begin
  369.             select [window t:global Res_file_name];
  370.             select [menuItem title:'Create New Resource' m:'Resource']!;
  371.             select_next_type();
  372.             creations_count := creations_count + 1;
  373.             select [button t:'OK']!;
  374.             check_for_alert_or_position_window_2();
  375.     end;
  376. end;
  377.  
  378. ##########################################################################################
  379. ### Execution Begins Here ###
  380. ##########################################################################################
  381. match [target t:?TargetName];
  382.  
  383. global ResEdit2;
  384. global Volume_name;
  385.  
  386. global System7 := RunningSystemSeven();
  387. if System7    println TargetName," Running System 7";
  388. else        println TargetName," Not Running System 7";
  389.  
  390. if System7
  391.     LaunchOk := LaunchAppInSystem7("ResEdit");
  392. else
  393.     LaunchOk := LaunchAppInSystem6("ResEdit");
  394. if not LaunchOk
  395.     GracefulExit("ResEdit failed to launch");
  396.  
  397. wait(2);
  398. if( match [menu t:"Resource" ] )
  399.     begin
  400.         ResEdit2 := true;
  401.         println TargetName," Running ResEdit2.1";
  402.     end;
  403. else
  404.     begin
  405.         ResEdit2 := false;
  406.         println TargetName," Running ResEdit1.2";
  407.     end;
  408.  
  409.                             # when Non_top_item_selection = 7, 
  410.                             # all types have been created (7 is the number of visible items)
  411. Non_top_item_selection := 0;
  412. Done_scrolling := false;
  413. Clicks_for_current_value := 0;
  414.  
  415.  
  416.                                            ##    Set these as you like
  417. Number_Of_Resources_To_Make := 10;            #    Number of resource windows. pass zero for all
  418. Res_file_name := "vu-wants-1-of-each";        #    File name to use
  419.                                            ##
  420. set_screen_dependents();
  421.  
  422. if ResEdit2
  423. begin        
  424.     if( match[ window t:"" o:1]! and not match[ button ] )    # Splash Screen?
  425.         Select [ Window o:1 ];
  426.  
  427.     create_resource_file_2(Res_file_name);
  428.     create_one_of_each_type_2( Number_Of_Resources_To_Make );
  429.  
  430.     verif_string := "window titles follow for verification";
  431.     println "∂n",verif_string;
  432.     for i := 1 to card(verif_string) print "=";
  433.     println;
  434.     
  435.     for each w in collect[window] println w.title; # ~~~~~~~~ to verify that all the windows were created
  436.     
  437.     select [menuItem t:'quit'];
  438.     select [ button t:"No" ];
  439.  
  440. end;
  441. else
  442. begin
  443.     match[window o:1 t:?Volume_name]!;
  444.     create_resource_file(Res_file_name);
  445.     create_one_of_each_type( Number_Of_Resources_To_Make );
  446.     
  447.     verif_string := "window titles follow for verification";
  448.     println "∂n",verif_string;
  449.     for i := 1 to card(verif_string) print "=";
  450.     println;
  451.     
  452.     for each w in collect[window] println w.title; # ~~~~~~~~ to verify that all the windows were created
  453.     
  454.     clear_file(Res_file_name,true);
  455.     select [menuItem t:'quit'];
  456. end;
  457.  
  458.